package com.bite.book.controller;

import com.bite.book.constant.Constants;
import com.bite.book.model.UserInfo;
import com.bite.book.service.UserService;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 用户登录 接口实现
 */
@Slf4j //打印日志的注解
@RequestMapping("/user")
@RestController
public class UserController {

    /**
     *该层调用service层
     */
    @Autowired
    private UserService userService;

    //登录接口
    //这里使用普通参数 进行传递
    //也可以使用JSON 进行传递 （后续练习）
    @RequestMapping("/login")
    public String login(String userName, String password, HttpSession session){
        log.info("用户登录 userName:{},password:{}",userName,password);
//        //进行参数校验
//        if (!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)) {
//            return "用户名或密码不能为空";
//        }
//        //验证用户名，密码
//        //未学习数据库的操作，这里进行硬编码操作（进行写死）
//        if (!"zhangsan".equals(userName) || !"123456".equals(password)){
//            return "账号或密码错误";
//        }
//        //验证正确，进行sessio 存储
//        //进行 session 存储，但是不是必须的（目前使用session进行存储）
//        session.setAttribute("userName",userName);
//        return "";

        /**
         * 已学习完数据库，利用从数据库里面进行拿取数据
         */
        //进行参数校验
        if (!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)) {
            return "用户名或密码不能为空";
        }
        /**
         * 验证用户名，密码 （从数据库里面验证）
         * 根据用户名查询该用户信息，判断密码是否正确
         * 这里要调用 service层
         */
        UserInfo userInfo = userService.queryUserByName(userName);
        if (userInfo == null || userInfo.getId() < 0){
            return "用户不存在";
        }

        if (!password.equals(userInfo.getPassword())){
            return "账号或者密码错误";
        }

        //验证正确，进行sessio 存储
        //进行 session 存储，但是不是必须的（目前使用session进行存储）
        userInfo.setPassword("");
        session.setAttribute(Constants.USER_INFO_SESSION_KEY,userInfo);
        return "";
    }
}
